package com.smile.frame.workflow.flowable.demo.service;

import com.smile.frame.workflow.flowable.demo.dto.BpmModelCreateReqDTO;
import com.smile.frame.workflow.flowable.demo.dto.BpmModelUpdateReqDTO;
import org.flowable.bpmn.model.BpmnModel;
import org.flowable.engine.repository.Model;


/**
 * 流程模型
 *
 * @author LGC
 */
public interface BpmnModelService {

    /**
     * 查询流程模型
     *
     * @param tenantId
     * @param key
     * @param name
     * @param category
     * @param pageNo
     * @param pageSize
     */
    void queryModelPage(String tenantId, String key, String name, String category, Integer pageNo, Integer pageSize);

    /**
     * 创建流程模型
     *
     * @param BpmModelCreateReq 创建信息
     * @param bpmnXml           xml
     * @return 模型ID
     */
    String createModel(BpmModelCreateReqDTO BpmModelCreateReq, String bpmnXml);

    /**
     * 更新流程模型
     *
     * @param bpmModelUpdateReq 更新信息
     */
    void updateModel(BpmModelUpdateReqDTO bpmModelUpdateReq);

    /**
     * 获取流程模型
     *
     * @param modelId 模型ID
     * @return 流程模型
     */
    Model getModel(String modelId);

    /**
     * 获得流程模型 BPMN XML
     *
     * @param modelId 模型ID
     * @return BPMN XML
     */
    byte[] getModelBpmnXML(String modelId);

    /**
     * 部署流程模型
     * 一个部署对应一个流程定义
     *
     * @param modelId 模型ID
     */
    void deployModel(String modelId);

    /**
     * 删除流程模型
     *
     * @param modelId 模型ID
     */
    void deleteModel(String modelId);

    /**
     * 修改模型状态，实际更新的部署的流程定义的状态
     *
     * @param modelId 模型ID
     * @param state   状态 SuspensionState 1 激活  2 挂起
     */
    void updateModelState(String modelId, Integer state);

    /**
     * 获得流程定义ID对应的 BPMN Model
     *
     * @param processDefinitionId 流程定义ID
     * @return BPMN Model
     */
    BpmnModel getBpmnModelByDefinitionId(String processDefinitionId);

}
